C# listview双击鼠标修改单元格内容

您所在的位置:网站首页 winform listview更新某个item C# listview双击鼠标修改单元格内容

C# listview双击鼠标修改单元格内容

2023-07-21 07:15| 来源: 网络整理| 查看: 265

1.C#创建winform工程;

2.在界面添加工具listview1;

3.鼠标右键点击listview1,更改属性:

FullRowSelect=True     开启行选择模式,开启才可以进行双击出第一列的其他列

HeaderStyle=Nonclickable   不响应鼠标单击列头操作

MultiSelect=True     允许选择多项

view=Details

4.初始化listview1,添加表头

 public void InitList()         {             ImageList imglist = new ImageList();             imglist.ImageSize = new Size(1, 20);             listView1.SmallImageList = imglist;

            listView1.View = View.Details;             this.listView1.Columns.Add("序号", 40, HorizontalAlignment.Left);             this.listView1.Columns.Add("列表1", 120, HorizontalAlignment.Left);             this.listView1.Columns.Add("列表2", listView1.Width - 185, HorizontalAlignment.Left);         }

5.添加函数接口和自定义textbox控件

        [DllImport("user32")]         public static extern int GetScrollPos(int hwnd, int nBar);         private TextBox txtInput;

6.选择listview1事件:

添加鼠标双击事件

        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)         {             try             {                 ListViewItem item = this.listView1.GetItemAt(e.X, e.Y);                 //找到文本框                 Rectangle rect = item.GetBounds(ItemBoundsPortion.Entire);                 int StartX = rect.Left; //获取文本框位置的X坐标                 int ColumnIndex = 0;    //文本框的索引

                //获取列的索引                 //得到滑块的位置                 int pos = GetScrollPos(this.listView1.Handle.ToInt32(), 0);                 foreach (ColumnHeader Column in listView1.Columns)                 {                     if (e.X + pos >= StartX + Column.Width)                     {                         StartX += Column.Width;                         ColumnIndex += 1;                     }                 }

                if (ColumnIndex < this.listView1.Columns.Count - 2)//第一列为序号,不修改。如果双击为第一列则不可以进入修改                 {                     return;                 }

                this.txtInput = new TextBox();

                //locate the txtinput and hide it. txtInput为TextBox                 this.txtInput.Parent = this.listView1;

                //begin edit                 if (item != null)                 {                     nDClick = this.listView1.Items[listView1.SelectedIndices[0]].Index;                     rect.X = StartX;                     rect.Width = this.listView1.Columns[ColumnIndex].Width; //得到长度和ListView的列的长度相同                                         this.txtInput.Bounds = rect;                     this.txtInput.Multiline = true;                     //显示文本框                     this.txtInput.Text = item.SubItems[ColumnIndex].Text;                     this.txtInput.Tag = item.SubItems[ColumnIndex];                     this.txtInput.KeyPress += new KeyPressEventHandler(txtInput_KeyPress);                     this.txtInput.Focus();                 }             }             catch (Exception ex)             {

            }         }

//添加回车保存内容         private void txtInput_KeyPress(object sender, KeyPressEventArgs e)         {             try             {                 if ((int)e.KeyChar == 13)                 {                     if (this.txtInput != null)                     {                         ListViewItem.ListViewSubItem lvst = (ListViewItem.ListViewSubItem)this.txtInput.Tag;

                        //检查PN是否存在                         int Index = 0;                         if (CheckPnIsExist(this.txtInput.Text, ref Index))                         {                             this.txtInput.Text = "";                             MessageBox.Show("第" + (Index + 1) + "行已经存在相同PN号,请重新输入!");                         }                         else                         {                             lvst.Text = this.txtInput.Text;                         }

                        this.txtInput.Dispose();                     }                 }             }             catch (Exception ex)             {

            }         }

        //添加事件SelectedIndexChanged,释放文本框内容         private void listView1_SelectedIndexChanged(object sender, EventArgs e)         {             try             {                 if (this.txtInput != null)                 {                     if (this.txtInput.Text.Length > 0)                     {                         ListViewItem.ListViewSubItem lvst = (ListViewItem.ListViewSubItem)this.txtInput.Tag;                        //检查PN是否存在                         int Index = 0;                         if (CheckPnIsExist(this.txtInput.Text,ref Index))                         {                             this.txtInput.Text = "";                             MessageBox.Show("第"+(Index+1)+"行已经存在相同PN号,请重新输入!");                         }                         else                         {                             lvst.Text = this.txtInput.Text;                         }                                              }

                    this.txtInput.Dispose();                 }             }             catch (Exception ex)             {

            }         }

//添加事件,鼠标单击MouseClick,将文本框内容显示在listview1

    private void listView1_MouseClick(object sender, MouseEventArgs e)         {             try             {                 if (this.txtInput != null)                 {                     if (this.txtInput.Text.Length > 0)                     {                         ListViewItem.ListViewSubItem lvst = (ListViewItem.ListViewSubItem)this.txtInput.Tag;

                        //检查PN是否存在                         int Index = 0;                         if (CheckPnIsExist(this.txtInput.Text, ref Index))                         {                             this.txtInput.Text="";                             MessageBox.Show("第" + (Index + 1) + "行已经存在相同PN号,请重新输入!");                         }                         else                         {                             lvst.Text = this.txtInput.Text;                         }                     }

                    this.txtInput.Dispose();                 }             }             catch (Exception ex)             {

            }         }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3